package com.devin.avatar.common.service;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;

import com.devin.avatar.common.dao.CrudDao;
import com.devin.avatar.common.entity.DataEntity;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

public class CrudService<D extends CrudDao<T>, T extends DataEntity> extends BaseService {
    
    @Autowired
    protected D dao;

    /**
     * 获取单条数据
     * 
     * @param id
     * @return
     */
    public T get(String id) {
	return dao.get(id);
    }

    /**
     * 获取单条数据
     * 
     * @param entity
     * @return
     */
    public T get(T entity) {
	return dao.get(entity);
    }

    /**
     * 查询列表数据
     * 
     * @param entity
     * @return
     */
    public List<T> findList(T entity) {
	return dao.findList(entity);
    }
    
    /**
     * 查询分页数据
     * 
     * @param entity
     * @param pageNum
     * @param pageSize
     * @return
     */
    public PageInfo<T> findPageInfo(T entity, int pageNum, int pageSize) {
	PageHelper.startPage(pageNum, pageSize);
	List<T> list = dao.findList(entity);
	return PageInfo.of(list);
    }

    /**
     * 保存数据（插入或更新）
     * 
     * @param entity
     */
    public void save(T entity) {
	if (StringUtils.isBlank(entity.getId())) {
	    entity.preInsert();
	    dao.insert(entity);
	} else {
	    entity.preUpdate();
	    dao.update(entity);
	}
    }

    /**
     * 删除数据
     * 
     * @param entity
     */
    public void delete(T entity) {
	dao.delete(entity);
    }
}
